import Vue from 'vue'
import App from './App'
import router from './router'
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
//axios组件就相当于jquery中的ajax
import axios from "axios";

//设置axios发送ajax请求的时候可以携带cookie
axios.defaults.withCredentials = true

//为axios添加一个请求的拦截器，在每一个请求发送之前会被拦截
axios.interceptors.request.use(config => {
  //校验请求地址是否是以/demo开始
  if(!config.url.startsWith("/electronic"))
    config.url = '/electronic' + config.url
  return config;
})

//也可以为axios添加一个响应的拦截器，这个响应结果是在最后处理之前被拦截
axios.interceptors.response.use( resp => {
  if(resp.data.status === 401){//登陆超时
    Vue.prototype.showAlert('登陆超时，请重新登陆', () => {
      router.push({path: '/'})
    })
  } else if(resp.data.status === 403){//禁止访问
    Vue.prototype.showAlert('没有访问权限，请联系管理员', () => {})
  } else {
    //resp.data就是我们后端服务器返回的R对象  而R对象中也存在data属性来存储数据
    return resp.data.data
  }
})

Vue.config.productionTip = false

Vue.use(ElementUI);

Vue.prototype.doGet = function (url, data, callback){
  axios.get(url, {params: data})
    .then(resp => {
      if(typeof callback === "function"){
        //axios发送的ajax请求，响应结果都是存储在resp对象中的data属性里
        callback(resp)
      }
    }).catch(error => {})
}

Vue.prototype.doPost = function (url, data, callback){
  axios.post(url, data)
    .then(resp => {
      if(typeof callback === "function"){
        //axios发送的ajax请求，响应结果都是存储在resp对象中的data属性里
        callback(resp)
      }
    }).catch(error => {})
}

Vue.prototype.doPut = function (url, data, callback){
  axios.put(url, data)
    .then(resp => {
      if(typeof callback === "function"){
        //axios发送的ajax请求，响应结果都是存储在resp对象中的data属性里
        callback(resp)
      }
    }).catch(error => {})
}

Vue.prototype.doDelete = function (url, data, callback){
  axios.delete(url, {params: data})
    .then(resp => {
      if(typeof callback === "function"){
        //axios发送的ajax请求，响应结果都是存储在resp对象中的data属性里
        callback(resp)
      }
    }).catch(error => {})
}

let dialogCount = 0; //定义一个变量来记录弹窗数量

Vue.prototype.showConfirm = function (msg, callback){
  if(dialogCount === 0){
    dialogCount++
    Vue.prototype.$confirm(msg, '警告', {
      confirmButtonText: '确定',
      cancelButtonText: '取消',
      type: 'warning'
    }).then(() => {
      if(typeof callback === "function"){
        callback()
        dialogCount --
      }
    }).catch(() => {
      dialogCount --
    });
  }
}

Vue.prototype.showAlert = function (msg, callback){
  if(dialogCount === 0){
    dialogCount ++
    Vue.prototype.$alert(msg, '提示', {
      confirmButtonText: '确定',
      callback: action => {
        if(typeof callback === "function"){
          callback();
          dialogCount--
        }
      }
    });
  }
}


new Vue({
  el: '#app',
  router,
  components: { App },
  template: '<App/>',
  render: h => h(App)
})
